A computer system is generally defined in terms of three basic system elements: a central processing unit (CPU), memory, and input/output (I/O) peripheral devices. A typical computer system works with a computer program known as an operating system (OS). The OS is a program that manages all other programs in a computer, the user interface, the interface with peripheral devices, memory allocation, and so forth. Each OS is written for a variety of system configurations such as variable physical memory size, various numbers of peripherals connected to the system, etc. and thus it can remain ignorant of the actual system configuration.
On the other hand the basic input/output system (BIOS) is a computer program that uses the actual system configuration to manage data flow between the OS and attached memory and I/O peripherals. The BIOS can translate OS requests into concrete actions that the CPU can take in response. The BIOS is usually stored on a nonvolatile memory device such as a read-only memory (ROM) and may be programmed for the particular system configuration.
The BIOS also manages operation of the computer system after startup and before control is passed to the OS. The BIOS typically performs a memory check after power-on to determine whether the memory physically present in the system is operational and can be used by the OS. The BIOS first determines the amount of memory present in the system. It may use a so-called system management (SM) bus to interrogate the memory devices present in the system and thus to determine the nominal size of the memory. Then the BIOS performs a memory test to detect the presence of bad memory elements and to take corrective action if it finds any. Finally it passes control to the OS but thereafter is periodically called by the OS to perform system specific I/O functions.
Recently multiprocessor computer architectures have been introduced for such applications as servers, workstations, personal computers, and the like. In one such multiprocessor architecture the physical memory is distributed among multiple processor nodes, but the BIOS runs on a single processor (known as the boot strap processor), making the memory test significantly more complex. In known multiprocessor systems if any of the memory elements fail the memory test, the boot strap processor reports the failure on a startup screen and halts the power on sequence.
Accordingly, it would be desirable to have a BIOS that efficiently performs a memory test and takes corrective actions to allow the system to continue operating in a multiprocessor, distributed memory environment despite the presence of the bad memory element. These and other desirable features and characteristics of the present invention will become apparent from the subsequent detailed description and the appended claims, taken in conjunction with the accompanying drawings and the foregoing technical field and background.